/*
 *  Copyright (C) 2010 Glauco
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.balisunrise.common;

/**
 * Esta inteface contém as restrições para ler uma lista de entidades do banco de
 * dados atravéz de um objeto de DAO.
 * @author Glauco
 * @version 1.0
 * @created 11-mai-2010 18:55:56
 */
public interface Query extends Basic{

    /**
     * Retorna a Classe da entidade que a query representa.
     */
    public Class getEntityClass();

    /**
     * Retorna o valor do número do primeiro registro que a query deve listar.
     */
    public int getFirstResult();

    /**
     * Atribui o valor do primeiro registro que a query deve listar.
     *
     * @param firstResult
     */
    public void setFirstResult(int firstResult);

    /**
     * Retorna o valor do número máximo de registro que a query deve listar.
     */
    public int getMaxResults();

    /**
     * Atribui o valor do número máximo de registro que a query deve listar.
     *
     * @param maxResults
     */
    public void setMaxResults(int maxResults);

    /**
     * Retorna o nome dos atributos que compões a ordem da query.
     */
    public String[] getOrders();

    /**
     * Adiciona o nome de um atributo que deve compor a ordem da query.
     *
     * @param order
     */
    public void addOrder(String order);

    /**
     * Retorna as Criterions (condições) da Query.
     */
    public Criterion[] getCriterions();

    /**
     * Adiciona uma Criterion (condição) à Query.
     *
     * @param criterion
     */
    public void addCriterion(Criterion criterion);

    /**
     * Limpa a ordenação da query.
     */
    public void clearOrder();

    /**
     * Limpa as Criterions (Condições) da query.
     */
    public void clearCriterion();

}